In contemporary computer programs, there are often several ways for a user to interact with a program's user interface, including gamepad input (e.g., pressing the ‘A’ button on a game controller), keyboard (e.g., QWERTY) input, and media remote input (e.g., pressing a semantic button on a media remote control device, like the “Fast Forward” button). Other typical ways to interact include touch input (e.g., by pressing an on-screen button with a finger, or indirectly with a gesture-detecting/tracking device such as Kinect®), or to interact via mouse or other pointer input (e.g., clicking on a UI element with a mouse). Another interactive technique is voice/speech input, such as saying the word represented by text on a button while in a voice input mode, (e.g., “Play”).
The many varied types of input, when considered in combination with the many types of UI elements, can be confusing and time-consuming for a UI designer to handle correctly. Moreover, testing and troubleshooting may be difficult given the various types of input devices, each of which may have its own nuances.